/*
 程序作者: 戴雨晨
 完成日期: 2014年3月18日
 章    节: 第 4 章
 题    号: 习题1
 题    目: 定义一个NumDays 类，它的功能是将以小时（hour）为单位的
           工作时间，转换为天数（day ）。例如，8 小时转换为1 天，
           12小时转换为1.5 天。该类的构造函数具有一个代表工作小时
           的参数，此外还有一些函数成员，实现小时和天的存储和检索。
           同时，该类还要重载下列的一些操作符：
           + 加操作符。当两个NumDays 对象相加时，重载后的+ 操作
           符函数应当返回这两个对象的hours 之和。
           - 减操作符。当两个NumDays 对象相减时，重载后的- 操作
           符函数应当返回这两个对象的hours 之差。
           ++前置增1 操作符和后置增1 操作符。这两个函数的功能是
           对NumDays 对象的hours 数据成员增1 。hours 增加以后，应
           当重新计算对应的天数。
           --前置减1 操作符和后置减1 操作符。这两个函数的功能是
           对NumDays 对象的hours 数据成员减1 。hours 减1 以后，应
           当重新计算对应的天数。
*/
#include <iostream>
using namespace std;
class NumDays
{
private:
	float days;
	int hours;
	void refresh_day()
	{
		days=(float)hours/24;
	}
	void refresh_hour()
	{
		hours=days*24;
	}
public:
	float getdays()
	{
		return days;
	}
	void setdays(float day)
	{
		this->days=day;
		refresh_hour();
	}
	int gethours()
	{
		return hours;
	}
	void sethours(int hour)
	{
		this->hours=hour;
		refresh_day();
	}
	NumDays operator+(NumDays &right)
	{
		NumDays temp;
		temp.sethours(this->hours+right.hours);
		temp.refresh_day();
		return temp;
	}
	NumDays operator-(NumDays &right)
	{
		NumDays temp;
		temp.sethours(this->hours-right.hours);
		temp.refresh_day();
		return temp;
	}
	NumDays operator++()
	{
		this->hours+=1;
		refresh_day();
		return *this;
	}
	NumDays operator++(int)
	{
		NumDays temp=*this;
		this->hours+=1;
		refresh_day();
		return temp;
	}
	NumDays operator--()
	{
		this->hours-=1;
		refresh_day();
		return *this;
	}
	NumDays operator--(int)
	{
		NumDays temp=*this;
		this->hours-=1;
		refresh_day();
		return temp;
	}
};
int main()
{
	NumDays d1, d2;
    d1.sethours(27.4);
    d2.sethours(47.2);
    cout << d1.gethours() << endl;
    cout << d1.getdays() << endl;
    cout << (d1+d2).getdays() << endl;
    d1.sethours(15.9);
    cout << d1.getdays() << endl;
    d1++;
    cout << d1.getdays() << endl;
    --d1;
    cout << d1.getdays() << endl;
	return 0;
}